package com.icast.api;

import android.content.Context;

import com.icast.tools.LogCat;
import com.smit.dvb.CIMenuInfo;
import com.smit.dvb.CIPinInfo;
import com.smit.dvb.DVBServiceInfo;
import com.smit.dvb.DVBTunerInfo;

/**
 * iCast SDK 逻辑功能实现，应用直接调用本类内的接口。
 * 
 * @author yuchen
 */
public class ICast {

	/**************************************** 生命周期 ****************************************/

	public static void onCreate(Context context) {
		new ICastApiInterface(context);
	}

	public static void onResume() {
		ICastApiInterface.resumeSystemControl();
	}

	public static void onPause() {
		ICastApiInterface.standbySystemControl();
	}

	public static void onDestroy() {
		ICastApiInterface.stop();
	}

	/**
	 * 判断SDK是否初始化完毕
	 */
	public static boolean isbDVBInitOk() {
		return ICastApiInterface.isbDVBInitOk();
	}

	/**************************************** 设备 ****************************************/
	
	/**************************************** 搜台 ****************************************/

	/**
	 * 全频搜台
	 */
	public static void startFullScan() {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return;
		}
		ICastApiInterface.startFullScan();
	}

	/**
	 * 自动搜台
	 */
	public static void startAutoScan() {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return;
		}
		ICastApiInterface.startAutoScan();
	}

	/**
	 * 手动搜台
	 */
	public static void startManualScan(DVBTunerInfo dvbTunerInfo) {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return;
		}
		ICastApiInterface.startManualScan(dvbTunerInfo);
	}

	/**
	 * 停止搜台
	 */
	public static void AbortScan() {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return;
		}
		ICastApiInterface.AbortScan();
	}

	/**************************************** 频道 ****************************************/

	/**
	 * 当前播放的频道序号
	 */
	private static int channelIndex = 0;

	/**
	 * 频道列表
	 */
	private static DVBServiceInfo[] DVBServiceInfo;

	/**
	 * 获取频道列表
	 */
	public static DVBServiceInfo[] getChannels() {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return null;
		}
		DVBServiceInfo = ICastApiInterface.getDVBServiceInfos();
		return DVBServiceInfo;
	}

	/**************************************** 直播 ****************************************/

	/**
	 * 开始直播
	 */
	public static void startPlay() {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return;
		}
		startPlay(channelIndex);
	}

	/**
	 * 播放指定频道
	 * 
	 * @param index
	 *            要播放的频道序号，从0开始
	 */
	public static void startPlay(int index) {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return;
		}
		getChannels();
		if (DVBServiceInfo != null && DVBServiceInfo.length > 0) {
			if (index < 0 || index >= DVBServiceInfo.length) {
				return;
			}
			channelIndex = index;
			ICastApiInterface.startDVBPlayer(index);
			ICastApiInterface.closeSession();// 关闭CI菜单
		} else {
			LogCat.log("启动播放失败：频道列表为空");
		}
	}

	/**
	 * 停止直播
	 */
	public static void stopPlay() {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return;
		}
		ICastApiInterface.stopDVBPlayer();
	}

	/**
	 * 向上换台
	 */
	public static void playUp() {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return;
		}
		getChannels();
		if (DVBServiceInfo != null && DVBServiceInfo.length > 0) {
			channelIndex++;
			if (channelIndex >= DVBServiceInfo.length) {
				channelIndex = 0;
			}
			ICastApiInterface.startDVBPlayer(channelIndex);
		} else {
			LogCat.log("向上换台失败：频道列表为空");
		}
	}

	/**
	 * 向下换台
	 */
	public static void playDown() {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return;
		}
		getChannels();
		if (DVBServiceInfo != null && DVBServiceInfo.length > 0) {
			channelIndex--;
			if (channelIndex < 0) {
				channelIndex = DVBServiceInfo.length - 1;
			}
			ICastApiInterface.startDVBPlayer(channelIndex);
		} else {
			LogCat.log("向下换台失败：频道列表为空");
		}
	}

	/**************************************** CI MMI ****************************************/

	/**
	 * 打开CI 菜单
	 */
	public static void openSession() {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return;
		}
		ICastApiInterface.openSession();
	}

	/**
	 * 获取CI菜单信息
	 */
	public static CIMenuInfo getCIMenuInfo() {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return null;
		}
		return ICastApiInterface.getCIMenuInfo();
	}

	/**
	 * 进入 CI MMI Menu中list的某个item
	 * 
	 * @param id
	 *            要进入的item序号，从1开始, 0为返回上一级
	 */
	public static void selectCIMenuItem(int id) {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return;
		}
		ICastApiInterface.selectCIMenuItem(id);
	}

	/**
	 * 获取Pin码信息
	 */
	public static CIPinInfo getCIPinInfo() {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return null;
		}
		return ICastApiInterface.getCIPinInfo();
	}

	/**
	 * 设置Pin码
	 */
	public static void setCIPinInfo(String pinText) {
		if (!isbDVBInitOk()) {
			LogCat.log("SDK尚未初始化");
			return;
		}
		ICastApiInterface.setCIPinInfo(pinText);
	}
}